home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / fft32010.arc / PROGRAM.1 next >
Encoding:
Text File  |  1984-11-13  |  4.0 KB  |  189 lines

  1.       IDT 'DFT'
  2. *
  3. * This program calculates a complex DFT.
  4. *
  5. *     Standard straight DFT algorithm.
  6. *     Uses table lookup of coefficients with table size N
  7. *       for sines and cosines.
  8. *     Maximum size of DFT is 64 points, complex.
  9. *     Keeps a full 32-bit running sum.
  10. *     All data begins in RAM and results are output
  11. *       sequentially to port 0.
  12. *
  13. N EQU 64        * Size of the transform is N.
  14. *
  15. X      EQU 0        * Data points are on page 0.
  16. * Rest of the variables are page 1 locations.
  17. ONE    EQU 0        * Contains value 1
  18. K      EQU 1        * Modulo counter, index into sine table
  19. J      EQU 2        * Count of DFT point
  20. HOLDN  EQU 3        * Contains value N
  21. QUARTN EQU 4        * Contains value N/4
  22. COS    EQU 5        * Current cosine value
  23. SIN    EQU 6        * Current sine value
  24. TABLE  EQU 7        * Contains location of sine table
  25. SUMREH EQU 8        * Current real DFT summation high
  26. SUMREL EQU 9        * Current real DFT summation low
  27. SUMIMH EQU 10        * Current imaginary DFT summation high
  28. SUMIML EQU 11        * Current imaginary DFT summation high
  29. *
  30.       AORG 0
  31. START      LDPK 1
  32.       LACK 1
  33.       SACL ONE
  34.       LT   ONE
  35.       MPYK SINE
  36.       PAC
  37.       SACL TABLE        * Save sine table address
  38.       LACK N
  39.       SACL HOLDN        * HOLDN = N
  40.       LACK N/4
  41.       SACL QUARTN        * QUARTN = N/4
  42.       ZAC
  43.       SACL J        * J = 0
  44. JLOOP         LARK AR0,N-2
  45.          LARK AR1,0
  46.          LARP 1
  47.          LAC  *+,15
  48.          SACH SUMREH    * Sum real = X(0)
  49.          SACL SUMREL
  50.          LAC  *+,15
  51.          SACH SUMIMH    * Sum imag = Y(0)
  52.          SACL SUMIML
  53.          ZAC
  54.          SACL K        * K = 0
  55. *
  56. ILOOP        LARP 1
  57.         LAC  K
  58.         ADD  J
  59.         SUB  HOLDN        * K = (K + J)mod N
  60.         BGEZ GT2PI
  61.            ADD    HOLDN
  62. GT2PI        SACL K            * 0 <= K < 2PI
  63.         ADD  TABLE
  64.         TBLR SIN        * Get coefficients
  65.         ADD  QUARTN
  66.         TBLR COS
  67. *
  68. * Main DFT calculations.
  69. *
  70.         ZALH SUMREH    ** Real **
  71.         ADDS SUMREL
  72.         LT  COS
  73.         MPY *+
  74.         LTA SIN
  75.         MPY *-
  76.         APAC
  77.         SACH SUMREH    * Sum = sum + cos(k)*x(i) + sin(k)*y(i)
  78.         SACL SUMREL
  79.         ZALH SUMIMH    ** Imaginary **
  80.         ADDS SUMIML
  81.         MPY *+
  82.         SPAC
  83.         LT  COS
  84.         MPY *+,AR0
  85.         APAC
  86.         SACH SUMIMH    * Sum = sum + cos(k)*y(i) - sin(k)*x(i)
  87.         SACL SUMIML
  88.         BANZ ILOOP    * Repeat for i = 2 to N
  89. *
  90. * Output DFT results.
  91. *
  92.          OUT  SUMREH,PA0    * Output real part
  93.          OUT  SUMIMH,PA0    * Output imaginary part
  94.          LAC  J
  95.          ADD  ONE        * J = J + 1
  96.          SACL J
  97.          SUB  HOLDN
  98.          BLZ  JLOOP     * Repeat for J = 1 to N
  99. *
  100. * End of program.
  101. *
  102. STOP    B STOP
  103. *
  104. *  Sine and cosine tables (length N).
  105. *
  106. SINE EQU $
  107.       DATA        0
  108.       DATA     3211
  109.       DATA     6392
  110.       DATA     9511
  111.       DATA    12539
  112.       DATA    15446
  113.       DATA    18204
  114.       DATA    20787
  115.       DATA    23169
  116.       DATA    25329
  117.       DATA    27244
  118.       DATA    28897
  119.       DATA    30272
  120.       DATA    31356
  121.       DATA    32137
  122.       DATA    32609
  123. COSINE EQU $
  124.       DATA    32767
  125.       DATA    32609
  126.       DATA    32137
  127.       DATA    31356
  128.       DATA    30272
  129.       DATA    28897
  130.       DATA    27244
  131.       DATA    25329
  132.       DATA    23169
  133.       DATA    20787
  134.       DATA    18204
  135.       DATA    15446
  136.       DATA    12539
  137.       DATA     9511
  138.       DATA     6392
  139.       DATA     3211
  140.       DATA        0
  141.       DATA    -3211
  142.       DATA    -6392
  143.       DATA    -9511
  144.       DATA     -12539
  145.       DATA     -15446
  146.       DATA     -18204
  147.       DATA     -20787
  148.       DATA     -23169
  149.       DATA     -25329
  150.       DATA     -27244
  151.       DATA     -28897
  152.       DATA     -30272
  153.       DATA     -31356
  154.       DATA     -32137
  155.       DATA     -32609
  156.       DATA     -32767
  157.       DATA     -32609
  158.       DATA     -32137
  159.       DATA     -31356
  160.       DATA     -30272
  161.       DATA     -28897
  162.       DATA     -27244
  163.       DATA     -25329
  164.       DATA     -23169
  165.       DATA     -20787
  166.       DATA     -18204
  167.       DATA     -15446
  168.       DATA     -12539
  169.       DATA    -9511
  170.       DATA    -6392
  171.       DATA    -3211
  172.       DATA        0
  173.       DATA     3211
  174.       DATA     6392
  175.       DATA     9511
  176.       DATA    12539
  177.       DATA    15446
  178.       DATA    18204
  179.       DATA    20787
  180.       DATA    23169
  181.       DATA    25329
  182.       DATA    27244
  183.       DATA    28897
  184.       DATA    30272
  185.       DATA    31356
  186.       DATA    32137
  187.       DATA    32609
  188.       END
  189.